/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package hermes.persistencia;

import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

/**
 *
 * @author Tiago
 */
public class ConexaoBancoDados {

    private static ConexaoBancoDados conexaoBancoDados = null;
    private Connection con;
    private String servidor;
    private String nomeBancoDados;
    private String usuario;
    private String senha;

    private ConexaoBancoDados() {
        servidor = "localhost:3306";
        nomeBancoDados = "projeto";
        usuario = "root";
        senha = "";
    }

    public static ConexaoBancoDados obterConexaoComBancoDados() {
        if (conexaoBancoDados == null) {
            conexaoBancoDados = new ConexaoBancoDados();
        }
        return conexaoBancoDados;
    }

    public void abrirConexaoBancoDados() {
        try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            con = DriverManager.getConnection("jdbc:mysql://" + servidor + "/" + nomeBancoDados, usuario, senha);
        } catch (InstantiationException ex) {
            JOptionPane.showMessageDialog(null, "Instantiation Exception");
            Logger.getLogger(ConexaoBancoDados.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            JOptionPane.showMessageDialog(null, "Illegal access exception!");
            Logger.getLogger(ConexaoBancoDados.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ClassNotFoundException ex) {
            JOptionPane.showMessageDialog(null, "Verifique o driver jdbc.", "Driver JDBC não encontrado", JOptionPane.ERROR_MESSAGE);
            Logger.getLogger(ConexaoBancoDados.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Erro ao tentar estabelecer conexao com banco de dados!", "URL Banco Dados Invalida", JOptionPane.ERROR_MESSAGE);
            Logger.getLogger(ConexaoBancoDados.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void fecharConexaoBancoDados() {
        try {
            con.close();
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Erro ao tentar fechar conexao com banco de dados!", "ERRO Fechamento Conexao", JOptionPane.ERROR_MESSAGE);
            Logger.getLogger(ConexaoBancoDados.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public boolean executarAtualizacao(String sql) {
        Statement stm = null;
        try {
            stm = con.createStatement();
            stm.executeUpdate(sql);
            stm.close();
            return true;
        } catch (SQLException ex) {
            Logger.getLogger(ConexaoBancoDados.class.getName()).log(Level.SEVERE, null, ex);
            return false;
        }
    }
    public Integer getAutoIncremento(String sql) throws SQLException {
        Statement stm = null;
        ResultSet rs = null;
        Integer i=0;
        try {
            stm = con.createStatement();
            stm.executeUpdate(sql);
            rs=stm.executeQuery("SELECT LAST_INSERT_ID()");
            rs.next();
            i=(Integer)rs.getInt(1);
            stm.close();

        } catch (SQLException ex) {
            Logger.getLogger(ConexaoBancoDados.class.getName()).log(Level.SEVERE, null, ex);
        }
            return i;
    }
    public ResultSet executarConsulta(String sql) {
        Statement stm = null;
        ResultSet rs = null;
        try {
            stm = con.createStatement();
            rs = stm.executeQuery(sql);
        } catch (SQLException ex) {
            Logger.getLogger(ConexaoBancoDados.class.getName()).log(Level.SEVERE, null, ex);
        }
        return rs;
    }



    public void desligarAutoCommit() throws SQLException {
        con.setAutoCommit(false);
    }

    public void doCommit() throws SQLException {
        con.commit();
    }

    public void doRollback() throws SQLException {
        con.rollback();
    }


}
